package com.smart.thrift.discoveryandbalance.rule;

import com.smart.thrift.discoveryandbalance.balancer.ILoadBalancer;
import com.smart.thrift.discoveryandbalance.discovery.ThriftServerNode;

/**
 * 服务选择规则
 */
public interface IRule {

    /**
     * 规则类型
     * @return
     */
    String getType();

    /**
     * 根据服务关键字返回提供服务的节点
     * @param key
     * @return
     */
    ThriftServerNode choose(String key);

    /**
     * 设置负载均衡器
     * @param lb ：负载均衡器
     */
    void setLoadBalancer(ILoadBalancer<? extends ThriftServerNode> lb);

    /**
     * 获取支持该规则的负载均衡器
     * @return
     */
    ILoadBalancer<? extends ThriftServerNode> getLoadBalancer();

}
